package com.helisa;

import android.app.ProgressDialog;

/**
 * La interfaz <code>RunnableProgressDeterminate</code> debe ser implementada por
 * cualquier clase de la cual sus instancias estan intentando ejecutar un proceso 
 * y que deseen mostrar un <code>ProgressDialog</code> para mostrar en que estado
 * se encuentra el mismo, especificando en exactamente que porcentaje del progreso va. 
 * La clase debe definir un metodo sin argumentos llamado
 * <code>runModified</code> y un metodo con un argumento entero <code>setProgress</code>
 * <p>
 * El metodo <code>runModified</code> es ejecutado desde el metodo <code>run</code>
 * que es sobreescrito para la interfaz <code>Runnable</code>.
 * <p>
 * El metodo <code>setProgress</code> debe implementar el llamado propio del
 * <code>ProgressDialog</code> para modificar el progreso del dialogo. 
 *
 * @author  Angie Milena Vega Leon
 * @version %I%, %G%
 * @see     java.lang.Thread
 * @since   JDK1.0
 */
public abstract  class RunnableProgressDeterminate implements Runnable{

	protected ProgressDialog p;
	
	void setProgressDialog(ProgressDialog p){
		this.p = p;
	}
	
	/**
     * Cuando se implementa la interfaz <code>RunnableProgressDeterminate</code> 
     * se usa un hilo en el que se ejecutara el proceso que se desea a traves del
     * metodo <code>runModified</code> 
     * <p>
     */
	public abstract void runModified();
	
	/**
	 * Cuando se implementa la  interfaz <code>RunnableProgressDeterminate</code> 
	 * se necesita que el hilo <code>runModified</code> calcule el progreso del
	 * proceso que se esta ejecutando y actualice el progreso del progressDialog.
	 * @param a El progreso del proceso que se ejecuta.
	 * <p>
	 */
	public abstract void setProgress(int a);
	
	/**
     * When an object implementing interface <code>Runnable</code> is used 
     * to create a thread, starting the thread causes the object's 
     * <code>run</code> method to be called in that separately executing 
     * thread. 
     * <p>
     * The general contract of the method <code>run</code> is that it may 
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
	public void run(){
		runModified();
		p.cancel();
	}
	
	
}
